S3 Express One Zoneと標準S3の性能をAWSCLIで比較してみた
re:Invent2023 で発表された、S3の新しいストレージクラス、「Amazon S3 Express One Zone」。 その性能傾向を確認するため、CLIで総容量4GB、1.2万オブジェクトの転送を実施して、従来(S3スタンダード)と比較する機会がありましたので紹介させて頂きます。
準備
AWS東京リージョンに検証用のEC2と、S3を用意しました。
EC2
- Instance type: c7gd.large
- AMI: al2023-ami-2023.2.20231113.0-kernel-6.1-arm64
- IAM Role: PowerUserAccess 相当付与
- AZ: ap-northeast-1a (apne1-az4)
awscli
CLIは最新バージョンに更新しました。
sudo dnf remove awscli -y curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install sudo ln -s /usr/local/bin/aws /usr/bin/aws
$ aws --version aws-cli/2.15.0 Python/3.11.6 Linux/6.1.61-85.141.amzn2023.aarch64 exe/aarch64.amzn.2023 prompt/off
インスタンスストア
作業領域として c7gd.large のインスタンスストアを利用しました。
sudo sh -c "mkfs.ext4 /dev/nvme1n1; mkdir -p /mnt/nvme1n1; mount /dev/nvme1n1 /mnt/nvme1n1;" sudo sh -c "mkdir -p /mnt/nvme1n1/tmp; chmod 777 /mnt/nvme1n1/tmp;"
$ df -h /dev/nvme1n1 Filesystem Size Used Avail Use% Mounted on /dev/nvme1n1 108G 28K 103G 1% /mnt/nvme1n1
CloudFrontの標準アクセスログ、総容量は4.1GB、12000強のファイルを用意しました。
$ ls -lah | head -n 8 total 4.1G drwxr-xr-x. 2 ec2-user ec2-user 860K Dec 10 16:03 . drwxrwxrwx. 5 root root 4.0K Dec 10 16:01 .. -rw-r--r--. 1 ec2-user ec2-user 1007 Dec 9 08:36 E2LAXXXXXXXXXX.2023-11-02-15.6523171c.gz -rw-r--r--. 1 ec2-user ec2-user 533 Dec 9 08:36 E2LAXXXXXXXXXX.2023-11-02-15.83230f88.gz -rw-r--r--. 1 ec2-user ec2-user 1.0K Dec 9 08:36 E2LAXXXXXXXXXX.2023-11-02-15.a45bf262.gz -rw-r--r--. 1 ec2-user ec2-user 1.9K Dec 9 08:36 E2LAXXXXXXXXXX.2023-11-02-15.a77ab92e.gz -rw-r--r--. 1 ec2-user ec2-user 1.5K Dec 9 08:36 E2LAXXXXXXXXXX.2023-11-02-15.c21876a0.gz $ ls -1 | wc -l 12086 $ ls -l | awk '{s+=$5; n++} END {print s/n}' 354541
S3
東京リージョンに3つのS3バケットを作成しました。
- 汎用 (Standard)
- ディレクトリ (S3 Express One Zone) ‐ apne1-az4 ‐ apne1-az1
測定
「s3 sync」を実施、S3への書き込み(アップロード)と、読み取り(ダウンロード)の所要時間を求めました。
time aws s3 sync . s3://<測定対象S3バケット>/cflog/ > /dev/null time aws s3 sync s3://<測定対象S3バケット>/cflog/ ./download/ > /dev/null
結果
書き込み
ストレージクラス | real | user | sys |
---|---|---|---|
S3 Standard | 1m51.281s | 0m45.076s | 0m11.347s |
Express One Zone (別AZ) | 0m31.894s | 0m29.967s | 0m7.471s |
Express One Zone (同一AZ) | 0m31.407s | 0m29.636s | 0m7.079s |
読み込み
ストレージクラス | real | user | sys |
---|---|---|---|
S3 Standard | 1m37.729s | 0m39.345s | 0m9.872s |
Express One Zone (別AZ) | 0m53.404s | 0m37.689s | 0m11.101s |
Express One Zone (同一AZ) | 0m52.899s | 0m37.405s | 0m11.641s |
コスト比較
東京リージョンの S3(標準)と、Express One Zone、ストレージとAPI課金のコストを比較しました。
ストレージクラス | Storage pricing | PUT, COPY, POST, LIST requests (per 1,000 requests) | GET, SELECT, and all other requests (per 1,000 requests) |
---|---|---|---|
Standard | $0.025 per GB | $0.0047 | $0.00037 |
S3 Express One Zone | $0.18 per GB | $0.0024 | $0.00019 |
まとめ
CLIを利用した簡易な検証ですが、 従来のS3(標準)と比較し Express One Zoneのストレージクラスは高速。特に書き込み時の待機時間が少ない利用ができる傾向が確認できました。
Express One Zone、S3標準と比較すると、月額のストレージコストは割高ですが API実行コストは半額の設定。 長期保管の必要がない中間データ、一連の処理が完了した後に撤去するファイル置き場としての適正が高いものと思われます。
Amazon Athenaで、クエリ結果からテーブル作成する CTASクエリの出力先として最適な利用が出来ると思われますが、その検証は改めて試みてみたいと思います。
CREATE TABLE cloudfront_logs_az1_p WITH ( format = 'PARQUET', external_location = 's3://<バケット名>--apne1-az1--x-s3/PARQUET') AS SELECT date, time, location, bytes, request_ip, method, host, uri, status, referrer, user_agent FROM "default"."cloudfront_logs"